/**************************************************************************
 *
 * Copyright (c) 2015-2017  QIKU Company             　　　　　　　            
 *                 奇酷软件（深圳）有限公司  版权所有 2015-2017
 *
 * PROPRIETARY RIGHTS of QIKU Company are involved in the  　　　　　　     
 * subject matter of this material.  All manufacturing, reproduction, use, 
 * and sales rights pertaining to this subject matter are governed by the  
 * license agreement.  The recipient of this software implicitly accepts   
 * the terms of the license.                                               
 * 本软件文档资料是奇酷公司的资产,任何人士阅读和使用本资料必须获得                     
 * 相应的书面授权,承担保密责任和接受相应的法律约束.                                 
 *
 **************************************************************************/
package com.yw.android.common.utils;

import java.security.MessageDigest;
import java.util.Locale;


/**
 * 获取MD5码
 *
 * @author yuanwei
 */
public class MD5 {
    /**
     * 日志标签
     */
    private final static String TAG = "MD5";

    /**
     * 获取指定文本内容对应的MD5码
     *
     * @param plain 文本内容
     * @return 文本内容对应的MD5码
     * @throws Exception 异常定义
     */
    public static String getString(String plain) throws Exception {
        return getString(plain.getBytes("UTF-8"));
    }

    /**
     * 获取指定文本内容对应的MD5码
     *
     * @param plain 文本内容
     * @return 文本内容对应的MD5码
     * @throws Exception 异常定义
     */
    public static String getString(byte[] plain) throws Exception {
        MessageDigest digest = MessageDigest.getInstance("MD5");
        digest.update(plain);
        byte[] buffer = digest.digest();
        return bufferToHex(buffer, 0, buffer.length);
    }

    /**
     * 将数组转换成十六进制字符串
     *
     * @param b 数组
     * @param m 起始位置
     * @param n 个数
     * @return 转化后的十六进制字符串
     */
    public static String bufferToHex(byte[] b, int m, int n) {
        String md5 = "";
        int k = m + n;

        if (k > b.length) {
            k = b.length;
        }

        for (int i = m; i < k; i++) {
            md5 += Integer.toHexString((b[i] & 0x000000FF) | 0xFFFFFF00).substring(6);
        }

        return md5.toLowerCase(Locale.getDefault());
    }
}
